﻿<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <!-- Documenting T:NAnt.VSNet.Tasks.SolutionTask-->
  <head>
    <meta http-equiv="Content-Language" content="en-ca" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link rel="stylesheet" type="text/css" href="../style.css" />
    <title>&lt;solution&gt; Task</title>
  </head>
  <body>
    <table width="100%" border="0" cellspacing="0" cellpadding="2" class="NavBar">
      <tr>
        <td class="NavBar-Cell">
          <a href="http://nant.sourceforge.net">
            <b>NAnt</b>
          </a>
          <img alt="-&gt;" src="../images/arrow.gif" />
          <a href="../index.html">Help</a>
          <img alt="-&gt;" src="../images/arrow.gif" />
          <a href="../tasks/index.html">Task Reference</a>
          <img alt="-&gt;" src="../images/arrow.gif" /> &lt;solution&gt;</td>
        <td class="NavBar-Cell" align="right">
                        v0.85</td>
      </tr>
    </table>
    <h1>&lt;solution&gt;</h1>
    <p> Compiles VS.NET solutions (or sets of projects), automatically determining project dependencies from inter-project references. </p>
    <p> This task support the following projects: </p>
    <ul style="list-style-type: disc;">
      <li>Visual Basic .NET</li>
      <li>Visual C# .NET</li>
      <li>Visual J# .NET</li>
      <li>Visual C++ .NET</li>
    </ul>
    <p class="i2">
      <b>Note:</b>  Right now, only Microsoft Visual Studio .NET 2002 and 2003 solutions and projects are supported. Support for .NET Compact Framework projects is also not available at this time. </p>
    <p> The <a href="../tasks/solution.html">&lt;solution&gt;</a> task also supports the model of referencing projects by their output filenames, rather than referencing them inside the solution. It will automatically detect the existance of a file reference and convert it to a project reference. For example, if project "A" references the file in the release output directory of project "B", the <a href="../tasks/solution.html">&lt;solution&gt;</a> task will automatically convert this to a project dependency on project "B" and will reference the appropriate configuration output directory at the final build time (ie: reference the debug version of "B" if the solution is built as debug). </p>
    <p class="i2">
      <b>Note:</b>  The <a href="../tasks/solution.html">&lt;solution&gt;</a> task expects all project files to be valid XML files. </p>
    <h3>Resx Files</h3>
    <p> When building a project for a down-level target framework, special care should be given to resx files. Resx files (can) contain references to a specific version of CLR types, and as such are only upward compatible. </p>
    <p> For example: if you want to be able to build a project both as a .NET 1.0 and .NET 1.1 assembly, the resx files should only contain references to .NET 1.0 CLR types. Failure to do this may result in a <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemInvalidCastExceptionClassTopic.asp">InvalidCastException</a> failure at runtime on machines with only the .NET Framework 1.0 installed. </p>
    <h3>Parameters</h3>
    <div class="table">
      <table>
        <tr>
          <th>Attribute</th>
          <th style="text-align: center;">Type</th>
          <th>Description</th>
          <th style="text-align: center;">Required</th>
        </tr>
        <tr>
          <td valign="top" class="required">configuration</td>
          <td style="text-align: center;">string</td>
          <td> The name of the solution configuration to build. </td>
          <td style="text-align: center;">True</td>
        </tr>
        <tr>
          <td valign="top">enablewebdav</td>
          <td style="text-align: center;">bool</td>
          <td> Allow the task to use WebDAV for retrieving/compiling the projects within solution. Use of <a href="../elements/NAnt.VSNet.Types.WebMap.html">WebMap</a> is preferred over WebDAV. The default is <b>false</b>. </td>
          <td style="text-align: center;">False</td>
        </tr>
        <tr>
          <td valign="top">includevsfolders</td>
          <td style="text-align: center;">bool</td>
          <td> Includes Visual Studio search folders in reference search path. The default is <b>true</b>. </td>
          <td style="text-align: center;">False</td>
        </tr>
        <tr>
          <td valign="top">outputdir</td>
          <td style="text-align: center;">directory</td>
          <td> The directory where compiled targets will be placed. This overrides path settings contained in the solution/project. </td>
          <td style="text-align: center;">False</td>
        </tr>
        <tr>
          <td valign="top">solutionfile</td>
          <td style="text-align: center;">file</td>
          <td> The name of the VS.NET solution file to build. </td>
          <td style="text-align: center;">False</td>
        </tr>
        <tr>
          <td valign="top">failonerror</td>
          <td style="text-align: center;">bool</td>
          <td> Determines if task failure stops the build, or is just reported. The default is <b>true</b>. </td>
          <td style="text-align: center;">False</td>
        </tr>
        <tr>
          <td valign="top">if</td>
          <td style="text-align: center;">bool</td>
          <td> If <b>true</b> then the task will be executed; otherwise, skipped. The default is <b>true</b>. </td>
          <td style="text-align: center;">False</td>
        </tr>
        <tr>
          <td valign="top">unless</td>
          <td style="text-align: center;">bool</td>
          <td> Opposite of <code>if</code>. If <b>false</b> then the task will be executed; otherwise, skipped. The default is <b>false</b>. </td>
          <td style="text-align: center;">False</td>
        </tr>
        <tr>
          <td valign="top">verbose</td>
          <td style="text-align: center;">bool</td>
          <td> Determines whether the task should report detailed build log messages. The default is <b>false</b>. </td>
          <td style="text-align: center;">False</td>
        </tr>
      </table>
    </div>
    <h3>Nested Elements:</h3>
    <!--Element-->
    <h4>
      <a id="projects">
      </a>
                    &lt;<a href="../types/fileset.html">projects</a>&gt;
                </h4>
    <div class="nested-element"> The projects to build. <p /></div>
    <h4>
      <a id="projects">
      </a>
                    &lt;/<a href="../types/fileset.html">projects</a>&gt;
                </h4>
    <!--Element-->
    <h4>
      <a id="referenceprojects">
      </a>
                    &lt;<a href="../types/fileset.html">referenceprojects</a>&gt;
                </h4>
    <div class="nested-element"> The projects to scan, but not build. <p /></div>
    <h4>
      <a id="referenceprojects">
      </a>
                    &lt;/<a href="../types/fileset.html">referenceprojects</a>&gt;
                </h4>
    <!--Collection-->
    <h4>
      <a id="webmap">
      </a>
            &lt;webmap&gt;
        </h4>
    <div class="nested-element"> WebMap of URL's to project references. <h5>&lt;map&gt;</h5><div class="nested-element"><p> Represents a single mapping from URL project path to physical project path. </p><h3>Parameters</h3><div class="table"><table><tr><th>Attribute</th><th style="text-align: center;">Type</th><th>Description</th><th style="text-align: center;">Required</th></tr><tr><td valign="top" class="required">path</td><td style="text-align: center;">file</td><td> Specifies the actual path to the project file, or the path fragment to replace. </td><td style="text-align: center;">True</td></tr><tr><td valign="top" class="required">url</td><td style="text-align: center;">string</td><td> Specifies the URL of the project file, or a URL fragment to match. </td><td style="text-align: center;">True</td></tr><tr><td valign="top">casesensitive</td><td style="text-align: center;">bool</td><td> Specifies whether the mapping is case-sensitive or not. </td><td style="text-align: center;">False</td></tr><tr><td valign="top">if</td><td style="text-align: center;">bool</td><td> Indicates if the URL of the project file should be mapped. </td><td style="text-align: center;">False</td></tr><tr><td valign="top">unless</td><td style="text-align: center;">bool</td><td> Indicates if the URL of the project file should not be mapped. </td><td style="text-align: center;">False</td></tr></table></div></div><h5>&lt;/map&gt;</h5></div>
    <h4>&lt;/webmap&gt;</h4>
    <!--Element-->
    <h4>
      <a id="excludeprojects">
      </a>
                    &lt;<a href="../types/fileset.html">excludeprojects</a>&gt;
                </h4>
    <div class="nested-element"> Fileset of projects to exclude. <p /></div>
    <h4>
      <a id="excludeprojects">
      </a>
                    &lt;/<a href="../types/fileset.html">excludeprojects</a>&gt;
                </h4>
    <!--Element-->
    <h4>
      <a id="assemblyfolders">
      </a>
                    &lt;<a href="../types/fileset.html">assemblyfolders</a>&gt;
                </h4>
    <div class="nested-element"> Set of folders where references are searched when not found in path from project file (HintPath). <p /></div>
    <h4>
      <a id="assemblyfolders">
      </a>
                    &lt;/<a href="../types/fileset.html">assemblyfolders</a>&gt;
                </h4>
    <h3>Examples</h3>
    <ul class="examples">
      <li>
        <p> Compiles all of the projects in <code>test.sln</code>, in release mode, in the proper order. </p>
        <pre class="code">
&lt;solution configuration="release" solutionfile="test.sln" /&gt;
    </pre>
      </li>
      <li>
        <p> Compiles all of the projects in <code>projects.txt</code>, in the proper order. </p>
        <pre class="code">
&lt;solution configuration="release"&gt;
    &lt;projects&gt;
        &lt;includesfile name="projects.txt" /&gt;
   &lt;/projects&gt;
&lt;/solution&gt;
    </pre>
      </li>
      <li>
        <p> Compiles projects A, B and C, using the output of project X as a reference. </p>
        <pre class="code">
&lt;solution configuration="release"&gt;
    &lt;projects&gt;
        &lt;include name="A\A.csproj" /&gt;
        &lt;include name="B\b.vbproj" /&gt;
        &lt;include name="C\c.csproj" /&gt;
    &lt;/projects&gt;
    &lt;referenceprojects&gt;
        &lt;include name="X\x.csproj" /&gt;
    &lt;/referenceprojects&gt;
&lt;/solution&gt;
    </pre>
      </li>
      <li>
        <p> Compiles all of the projects in the solution except for project A. </p>
        <pre class="code">
&lt;solution solutionfile="test.sln" configuration="release"&gt;
    &lt;excludeprojects&gt;
        &lt;include name="A\A.csproj" /&gt;
    &lt;/excludeprojects&gt;
&lt;/solution&gt;
    </pre>
      </li>
      <li>
        <p> Compiles all of the projects in the solution mapping the specific project at http://localhost/A/A.csproj to c:\inetpub\wwwroot\A\A.csproj and any URLs under http://localhost/B/[remainder] to c:\other\B\[remainder]. This allows the build to work without WebDAV. </p>
        <pre class="code">
&lt;solution solutionfile="test.sln" configuration="release"&gt;
    &lt;webmap&gt;
        &lt;map url="http://localhost/A/A.csproj" path="c:\inetpub\wwwroot\A\A.csproj" /&gt;
        &lt;map url="http://localhost/B" path="c:\other\B" /&gt;
    &lt;/webmap&gt;
&lt;/solution&gt;
    </pre>
      </li>
      <li>
        <p> Compiles all of the projects in the solution placing compiled outputs in <code>c:\temp</code>.</p>
        <pre class="code">
&lt;solution solutionfile="test.sln" configuration="release" outputdir="c:\temp" /&gt;
    </pre>
      </li>
    </ul>
    <h3>Requirements</h3>
    <div style="margin-left: 20px;">
      <b>Assembly:</b> NAnt.VSNetTasks (0.85.2478.0)
            </div>
  </body>
</html>